1 פתרון בחינת הבגרות פרק ראשון - )יסודות( Java שאלה 1 C#
6 Java שאלה 2 ב. פלט a a1 A A 4 + 5 = 9 4 + 5 = 9 n1 n2 n1 n2 8 + 9 = 17? 4? 5 4 8 5 9
3 :C# שאלה 2 פלט a a1 A A 4 + 5 = 9 4 + 5 = 9 n1 n2 n1 n2 8 + 9 = 17 ב.? 4? 5 4 8 5 9
4 : Java שאלה 3 לא נדרש a1 a2 a3 a4 Button Button Button Button num 1 num 2 num 3 num 4 size 12 14 size 12 size 12 size 5 14 color red color green color blue color black ד. פלט תוצאה ערכים תנאי a1.issamesize(a3) 14 12 false a4.issamesize(a1) 14 = 14 true $$$ a2.issamesize(a3) 12 = 12 true ###
5 :C# שאלה 3 לא נדרש a1 a2 a3 a4 Button Button Button Button num 1 num 2 num 3 num 4 size 12 14 size 12 size 12 size 5 14 color red color green color blue color black ד. תנאי ערכים תוצאה פלט a1.issamesize(a3) 14 12 false a4.issamesize(a1) 14 = 14 true $$$ a2.issamesize(a3) 12 = 12 true ###
2 פרק שני - )( :Java שאלה 4 פעולות עזר:
7
8 C#: שאלה 4 פעולות עזר:
9
11 a.length = 5 a.length = 5 0 1 2 3 4 a 2 4 7 12 18 שאלה 5 א. (a,11) sod ערך k i i<4 j j<5 a[i] a[j] a[i]+a[j] == k מוחזר 11 0 T 1 T 2 4 F 2 T 7 F 3 T 12 F 4 T 18 F 5 F אמת 1 T 2 T 4 7 T ב. (a,10) sod ערך k i i<4 j j<5 a[i] a[j] a[i]+a[j] == k מוחזר 11 0 T 1 T 2 4 F 2 T 7 F 3 T 12 F 4 T 18 F 5 F 1 T 2 T 4 7 F 3 T 12 F 4 T 18 F 5 F 2 T 3 T 7 12 F 4 T 18 F 5 F 3 T 4 T 12 18 F 5 F שקר 4 F
11 ג. ד. ה. הפעולה מחזירה "אמת" אם קיימים שני איברים במערך שסכומם k, ו- "שקר" אחרת. סיבוכיות הפעולה sod היא ) 2.O(n בהנחה שיש במערך n איברים: הלולאה החיצונית רצה על כל המערך - סה"כ n צעדים ובתוכה לולאה פנימית הרצה בכל פעם על איבר אחד פחות: 2 1 n 1 ( n 1) n n ( n 1) ( n 2) ( n 3)... 2 1 Sn O( n 2 2 2 ) what (a, k) a.length = 5 a.length = 5 0 1 2 3 4 a 2 4 7 12 18 k left right left<right I a[left] II a[right] I+II == k I+II < k 11 0 4 T 2 18 F F 3 T 12 F F 2 T 7 F T ערך מוחזר אמת 1 T 4 T.O(n) what ו. סיבוכיות הפעולה היא הפעולה עוברת לכל היותר מעבר אחד על כל נתוני המערך, עד שמוצאת או לא מוצאת שני איברים שסכומם k. O(n 2 ) O(n) ז. סיבוכיות הפעולה - sod ריבועית סיבוכיות הפעולה - what ליניארית ולכן, what יעילה יותר. )1( )6( ח. sod תשיג את מטרתה, כי היא בודקת בכל פעם איבר אחר מול כולם. what לא תשיג את המטרתה, כי היא אינה בודקת את כל האפשרויות. למשל: עבור המערך הבא תחזיר sod "אמת", ואילו what תחזיר "שקר". 0 1 2 3 4 a 18 2 4 7 12
16 שאלה א : Java 6 - ג. כותרות הפעולות משולב עם סעיפים ב' )מימוש פעולה בונה( ו- ג' )מימוש הפעולה )sum
13 ד. דרך כתיבה נוספת לניהול השלב השני של המשחק: boolean gameover = false; while (! gameover) if (! deck.move()) gameover = true;
14 שאלה א : C# 6 - ג. כותרות הפעולות משולב עם סעיפים ב' )מימוש פעולה בונה( ו- ג' )מימוש הפעולה )sum
15 ד. דרך כתיבה נוספת לניהול השלב השני של המשחק: bool gameover = false; while (! gameover) if (! deck.move()) gameover = true;
12 פרק שלישי - מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י: רונית מרציאנו שאלה 7 א. טבלת מעקב אחר ביצוע קטע התוכנית AX BX ZF SF CF AH AL BH BL C8H 3BH MOV AX, C83BH A8H 9CH + + MOV BX, A89CH 90H 76H SHL AX, 1 77H OR AL, 33H 63H NOT BL 38H DAH A8H 63H + ADD AX, BX ARR DB 5 DUP(?) ב. נתונה ההגדרה הבאה: עקוב בעזרת טבלת מעקב אחר ביצוע של כל אחד מהקטעים וקבע אם הוא מבצע את הנדרש או לא. i. לא מבצע את הנדרש, מאפס רק 4 תאים ראשונים MOV SI,0 MOV CX,4 A1: MOV ARR[SI],0 ARR 00 11 01H 11 02H 11 03H? 04H INC SI LOOP A1 CX 04H SI 00 0001H 0002H 0003H 0004H
17.ii מבצע את הנדרש, MOV CX,5 LEA BX,ARR MOV AL,0 A1: MOV [BX],AL INC BX LOOP A1 CX BX AX AH AL 05H 00 00 04H 0001H 03H 0002H 02H 0003H 01H 0004H 0005H iii לא מבצע את הנדרש, מאפס רק 4 תאים אחרונים, לא מאפס את התא הראשון MOV BX,5 ARR? 00 01H 00 02H 00 03H 00 04H DEC BX A1: MOV ARR[BX],0 DEC BX JNZ A1 BX 05H 04H 03H 02H 01H
18 iv מבצע את הנדרש, MOV DI,0 A1: MOV ARR[DI],0 INC DI CMP DI,5 JC A1 DI 00 0001H 0002H 0003H 0004H 0005H שאלה 8 יש לכתוב קטע תוכנית באסמבלי, שיציב באוגר שבאוגר.AX BL את מספר הפעמים שהרצף 1111 מופיע במספר הבינארי MOV CX,12 ; LOOP MOV BL,0 ; COUNTER 1011 AGAIN: MOV DX,AX AND DX,000BH CMP DX,000BH JNZ CONT INC BL CONT: SHR AX,1 LOOP AGAIN
19 פרק שלישי - מבוא לחקר ביצועים שאלה 9 שאלה 11
61 שאלה פרק שלישי - מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. 11 א. ב. המילה הקצרה ביותר היא 000$$. האוטומט שמקבל את השפה L: 1 1 1 $ $ $ 1 1 1 1
61 השלמת מכונת טיורינג עבור הפונקציה min(m,n) f(m,n)= כאשר m,n>0, כתובים בשפה האונרית וסימן # מפריד בניהם. תוצאת המכונה תיכתב בין שני $. ימין, /a 1 ימין, /a a ימין, b /b ימין, 1 / 1 א שמאל, /b 1 ימין, /# # q0 q1 q2 q3 שאלה 12 א. שמאל, /b b שמאל, # / # שמאל, 1 1 / ב ימין /$, # ג שמאל, $ / Δ ימין 1, / b q4 q5 q6 ימין /$, Δ 1/$ ימין, /$ # שמאל 1, / b ב. תהליך החישוב של המכונה בעבור הקלט 1=m,1=n 1 # 1 Δ q0 a # 1 Δ q1 a # 1 Δ q2 a # b Δ q3 a # b Δ q3 a # b Δ q0 a $ b Δ q4 a $ 1 Δ Δ q4 a $ 1 $ Δ q5
66 Java תרגיל פרק שלישי - תכנות מונחה עצמים public class Program public static void main(string[] args) TransportationCompany company1 = new TransportationCompany(); 13 א. Vehicle boat = new Boat ("sea ", 50); company1.addvehicle (boat); company1.addvehicle (new Train (150, 6)); אפשר כך )הוספת סירה( ואפשר גם כך )הוספת רכבת( company1.display(); public String tostring() return this.type + "\t" + this.way + "\t max speed : " + this.maxspeed; tostring() מתאימה: public String tostring() return "Train: \t\t" + super.tostring() + "\t num of carriages: " + this.numofcarriages; ב. נוסיף בכל מחלקה פעולה במחלקה :Vehicle במחלקה :Train public String tostring() return "Airplane: \t" + super.tostring() + "\t max height: " + this.maxheight; במחלקה :Airplane במחלקה :Boat )למעשה אפשר לוותר על הפעולה במחלקה זו כי אין לה תכונות נוספות מעבר לאלו שב-.Vehicle הפעולה הוספה למחלקה כדי שגם כלי השיט יציג את שם המחלקה שלו) public String tostring() return "Boat: \t\t" + super.tostring();
63 ג. הוספת קרונות רכבת הינה באחריותה של הרכבת. הוספת קרונות לכל הרכבות שבצי כלי הרכב של החברה הינו באחריותה של החברה. רק במחלקה זו יש גישה ישירה למערך כלי הרכב, ולכן נוסיף את הפעולה במחלקה : TransportationCompany --- הוספת n שבחברה הרכבות לכל קרונות ---// public void addcarriages (int n) for (int i = 0 ; i < this.counter ; i++) if (this.vehicles[i] instanceof Train) ((Train)this.vehicles[i]).incNumOfCariagges(n);
64 תרגיל 14 הבדיקה לא חובה. אם ערך התא null הפעולה instanceof תחזיר שקר
65 פרק שלישי - תכנות מונחה עצמים #C שאלה 15 שאלה 16 נכתב ע"י זיוה קונצמן public virtual bool IsLike(Object obj) return obj is AA && ((AA)obj).GetSt().Equals(this.GetSt()); public override bool IsLike(object obj) return obj is BB && ((BB)obj).GetNum() == this.getnum(); במחלקה :AA במחלקה : BB א. ב. ג. ד. ה. קטע התוכנית נכון. מתבצעת המרה אוטומטית כלפי מעלה של משתנה מטיפוס הבן להפניה מטיפוס האב. הבן הוא גם טיפוס האב לכן אין בעיה. st = excellent num = 1 הפלט יהיה: קטע התוכנית שגוי. לא יכול להמיר כלפי מטה הפניה מסוג האב להיות הפניה מסוג הבן, הוא לא נוצר כ- BB אלא כ-,AA ואינו יכול לעבור המרה למשהו שהוא לא. השגיאה היא שגיאת קומפילציה. public static string LongString(Object[] a) string st = ""; for (int i = 0; i < st.length; i++) if (a[i] is AA &&! (a[i] is BB)) st += ((AA)a[i]).GetSt(); else if (a[i] is BB) for (int j = 1 ; j < ((BB)a[i]).GetNum() ; j++) st += ((BB)a[i]).GetSt(); return st;